package View;

import DAO.ItemDAO;
import DAO.NotaFiscalDAO;
import DAO.PedidoDAO;
import Pojo.Item;
import Pojo.NotaFiscal;
import Pojo.Pedido;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MenuPedido {
    
    
    /**
     * Metodo que lista um Pedido, com todas as informações dele como codigo dos itens no pedido
     * quantidade,o nome dos itens e a quantidade e o valor desse item no pedido
     * @param pedido - O pedido de um cliente
     */
    public boolean removerItemDoPedido(ItemDAO itemDao,PedidoDAO pedidoDao,int codigo,String nome){
        System.out.println(codigo);
        System.out.println(nome);
        Item itemAux;
        Pedido pedidoAux;
        pedidoAux  = pedidoDao.buscaPedidoCodigo(codigo);
        itemAux = itemDao.buscaItemNome(nome);
        if(itemAux != null){
            pedidoAux.getHash().remove(itemAux);
            return true;
        }
        return false;
    }
    
    
    /**Metodo que Cadastra um novo item na lista de itens do pedido de um cliente
     * Verifica se há disponibilade no estoque
     * e se a quantidade no pedido não ultrapassa a quantidade no estoque
     * Quando o item é inserido na lista de itens do pedido é descontado do estoque a quantidade de itens desse pedido
     * @param pedido - Pedido de um cliente
     * @param itemDao - Funções que ajudam na busca de um item no estoque para certificar a disponibilidade
     * dentre outras coisas
     */
    public void CadastrarItem(Pedido pedido, ItemDAO itemDao, String nome, int quantidade){
                    //Pedido pedido = new Pedido();
                        Item item,itemAux;
                        boolean op=false;
                    
                        item = itemDao.buscaItemNome(nome);
                        HashMap<Item,Integer> hashItens;
                        hashItens = pedido.getHash();
                        
                        for ( Entry<Item, Integer> entry: hashItens.entrySet()) {
                            itemAux = entry. getKey();
                            if(itemAux.getNome().equals(nome)){
                                op=true;
                                
                                    int qtdItem = itemAux.getQuantidade();
                                    //itemAux.setQuantidade(qtdItem - quantidade );
                                    quantidade = entry.getValue() + quantidade;
                                    entry.setValue(quantidade);
                            }
                        }
                      
                      if(!op){
                                int qtdItem = item.getQuantidade();
                                //item.setQuantidade(qtdItem - quantidade);
                                pedido.setItem(item,quantidade);
                      }
                    float precoCusto = item.getPrecoDeCusto();
                    float margemLucro = item.getMargemDeLucro();
                    float preco = precoCusto*(1+margemLucro/100);
                    float total = 0;
                    total = total+(preco*quantidade);
                    pedido.setPreco(total);
    }
    
    
    /**Função que termina(fecha) o pedido do cliente, ou seja remove o pedido da lista de pedidos em aberto
     * e emite a nota fiscal do pedido para o cliente
     * e adiciona essa nota a uma lista para cadastrar um historico de pedidos
     * @param pedidoDao - Funções que ajudam na busca de um pedido na lista de pedidos em aberto dentre outras coisas
     * @param pedido - Pedido de um cliente
     * @param notaFiscalDao - Funções para gravar a nota em um arquivo de texto e adicinar ela em uma lista
     * de notas fiscais
     */
    public boolean fecharPedido(PedidoDAO pedidoDao,Pedido pedido, NotaFiscalDAO notaFiscalDao, ItemDAO itemDao){
        
        //ArrayList<Pedido> lista = pedidoDao.getListaPedidos();
        GregorianCalendar date = new GregorianCalendar();
        NotaFiscal novaNota = new NotaFiscal();

        HashMap<Item,Integer> hashItens;
        hashItens = pedido.getHash();
        Set mapSet = (Set) hashItens.entrySet();
        Iterator mapIterator = mapSet.iterator();
        Map.Entry mapEntry = (Map.Entry) mapIterator.next();
        do{
            Item aux = (Item)(mapEntry.getKey());
            Item aux2 = itemDao.buscaItemNome(aux.getNome());
            int qunt = aux2.getQuantidade();
            if((Integer)mapEntry.getValue()>aux2.getQuantidade()){
                return false;
            }
            else{
                pedidoDao.excluirPedido(pedido.getCodigo());
                novaNota.setData(date.getTime());
                novaNota.setPedido(pedido);
                notaFiscalDao.adicionarNotaFiscal(novaNota);
                notaFiscalDao.escreverArquivo();
                pedidoDao.escreverArquivo();
                aux2.setQuantidade(qunt - (Integer)mapEntry.getValue());
                return true;
            }
        }while(mapIterator.hasNext());
    }
    }
